Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Commit 9bd7a5970c15a67da441af0ab1c184cfa0f33aaa


Parents : 0a1be10
Author : Mark Qvist <mark@unsigned.io>
Date : 2025-11-02T00:27:57+01:00

Implemented getting and displaying backend service log on Android

Changes

2 files changed, 52 insertions(+), 5 deletions(-)


Diff

diff --git a/sbapp/sideband/core.py b/sbapp/sideband/core.py
index 5aa22acb..7bfef1d0 100644
--- a/sbapp/sideband/core.py
+++ b/sbapp/sideband/core.py
@@ -2135,6 +2135,8 @@ class SidebandCore():
elif "stop_tracking" in call:
args = call["stop_tracking"]
connection.send(self.stop_tracking(object_addr=args["object_addr"]))
+ elif "get_service_log" in call:
+ connection.send(self.get_service_log())
else:
connection.send(None)
@@ -4156,6 +4158,34 @@ class SidebandCore():
def get_log(self):
return "\n".join(self.log_deque)
+ def _service_get_service_log(self):
+ if not RNS.vendor.platformutils.is_android():
+ return False
+ else:
+ if self.is_client:
+ try: return self.service_rpc_request({"get_service_log": True })
+ except Exception as e:
+ RNS.log("Error while sending message over RPC: "+str(e), RNS.LOG_DEBUG)
+ RNS.trace_exception(e)
+ return False
+ else:
+ return False
+
+ def get_service_log(self):
+ if self.allow_service_dispatch and self.is_client:
+ try: return self._service_get_service_log()
+
+ except Exception as e:
+ RNS.log("Error while getting service log: "+str(e), RNS.LOG_ERROR)
+ RNS.trace_exception(e)
+ return False
+
+ else:
+ try: return "\n".join(self.log_deque)
+ except Exception as e:
+ RNS.log("An error occurred while getting message transfer stamp cost: "+str(e), RNS.LOG_ERROR)
+ return None
+
def __start_jobs_immediate(self):
if self.log_quiet:
selected_level = 0

diff --git a/sbapp/ui/utilities.py b/sbapp/ui/utilities.py
index d3adcc74..80dd1635 100644
--- a/sbapp/ui/utilities.py
+++ b/sbapp/ui/utilities.py
@@ -182,14 +182,23 @@ class Utilities():
threading.Thread(target=self.update_logviewer_job, daemon=True).start()
def update_logviewer_job(self, sender=None):
- try:
- output = self.app.sideband.get_log()
- except Exception as e:
- output = f"An error occurred while retrieving log entries:\n{e}"
+ try: output = self.app.sideband.get_log()
+ except Exception as e: output = f"An error occurred while retrieving log entries:\n{e}"
+
+ if not RNS.vendor.platformutils.is_android(): service_output = None
+ else:
+ try: service_output = self.app.sideband.get_service_log()
+ except Exception as e: service_output = f"An error occurred while retrieving log entries:\n{e}"
+
self.logviewer_screen.log_contents = output
def cb(dt):
- self.logviewer_screen.ids.logviewer_output.text = f"[font=RobotoMono-Regular][size={int(dp(12))}]{output}[/size][/font]"
+ if not RNS.vendor.platformutils.is_android():
+ self.logviewer_screen.ids.logviewer_output.text = f"[font=RobotoMono-Regular][size={int(dp(12))}]{output}[/size][/font]"
+ else:
+ self.logviewer_screen.ids.logviewer_output.text = f"[size=18dp][b]Frontend Log[/b][/size][size=5dp]\n \n[font=RobotoMono-Regular][size={int(dp(12))}]{output}[/size][/font]"
+ self.logviewer_screen.ids.slogviewer_output.text = f"\n[size=18dp][b]Service Log[/b][/size][size=5dp]\n \n[font=RobotoMono-Regular][size={int(dp(12))}]{service_output}[/size][/font]"
+ self.logviewer_screen.log_contents += f"\n\n{service_output}"
Clock.schedule_once(cb, 0.2)
if self.app.root.ids.screen_manager.current == "logviewer_screen":
@@ -377,6 +386,14 @@ MDScreen:
size_hint_y: None
text_size: self.width, None
height: self.texture_size[1]
+
+ MDLabel:
+ id: slogviewer_output
+ markup: True
+ text: ""
+ size_hint_y: None
+ text_size: self.width, None
+ height: self.texture_size[1]
"""
layout_advanced_screen = """


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────